3.6.1 Principios de TCP
Para proporcionar una transferencia de datos fiable, TCP confía en muchos de los principios básicos, incluyendo los mecanismos de detección de errores, las retransmisiones, los reconocimientos acumulativos, los temporizadores y los campos de cabecera para los números de secuencia y de reconocimiento.
Se dice que TCP está orientado a la conexión porque antes de que un proceso de la capa de aplicación pueda comenzar a enviar datos a otro, los dos procesos deben primero “establecer una comunicación” entre ellos; es decir, tienen que enviarse ciertos segmentos preliminares para definir los parámetros de la transferencia de datos que van a llevar a cabo a continuación. Como parte del proceso de establecimiento de la conexión TCP, ambos lados de la misma iniciarán muchas variables de estado TCP asociadas con la conexión TCP.
Dado que el protocolo TCP se ejecuta únicamente en los sistemas terminales y no en los elementos intermedios de la red (routers y switches de la capa de enlace), los elementos intermedios de la red no mantienen el estado de la conexión TCP; los routers ven los datagramas, no las conexiones.
Proporciona un servicio full-duplex (flujo de datos en ambas direcciones en la misma conexión). Una conexión TCP casi siempre es una conexión punto a punto (entre un único emisor y un único receptor).
De vez en cuando, TCP tomará fragmentos de datos del buffer de emisión. La cantidad máxima de datos que pueden tomarse y colocarse en un segmento de la capa de red, está limitada por el tamaño máximo de segmento (MSS).
TCP empareja cada segmento de datos del cliente con una cabecera TCP, formando los segmentos TCP.
Cuando TCP recibe un segmento en el otro extremo, los datos se colocan en el buffer de recepción.
En conclusión, TCP consta de buffers, variables y un socket de conexión a un proceso en cada host perteneciente a la conexión.
20 bytes en total.
El segmento TCP consta de campos de cabecera y un campo de datos. El campo de datos contiene un fragmento de datos de la aplicación.
El número de puerto de origen y destino, se usan para multiplexar y demultiplexar los datos.
Al igual que en UDP, se usa un campo de suma de comprobación (checksum).
También incluye un campo número de secuencia (32 bits) y el número de reconocimiento (32 bits) usados para el servicio de transferencia de datos fiable.
El campo ventana de recepción (16 bits) se usa por el control de flujo.
El campo longitud de cabecera (4 bits), la cabecera puede tener una longitud variable.
El campo opciones (normalmente vacío).
El campo indicador (6 bits), bit ack, rst, syn y fin.
TCP percibe los datos como un flujo de bytes no estructurado pero ordenado. El número de secuencia de un segmento es el número del primer byte del segmento dentro del flujo de bytes. El número de reconocimiento que el host receptor incluye en su segmento es el número de secuencia del siguiente byte que el host receptor está esperando del host emisor. TCP proporciona reconocimiento acumulativo dado que solo confirma los bytes hasta el primer byte que falta en el flujo.
Dependiendo de la implementación, cuando los segmentos no llegan en orden:
Ambos lados de la conexión TCP eligen aleatoriamente un número de secuencia inicial. Con el fin de minimizar la posibilidad de que un segmento que todavía está presente en la red (a causa de una conexión anterior que ya ha terminado entre dos hosts), pueda ser confundido con un segmento válido de una conexión posterior entre los mismos host.
TCP utiliza un mecanismo de fin de temporización/retransmisión para recuperarse de la pérdida de segmentos.
En cualquier instante,
RTTMuestra
.
Por lo tanto, el intervalo de fin de temporizador deberá ser mayor o igual que
TCP crea un servicio de transferencia de datos fiable sobre el servicio de mejor esfuerzo pero no fiable de IP. El servicio de transferencia de datos fiable de TCP garantiza que el flujo de datos que un proceso extrae de su buffer de recepción TCP no está corrompido, no contiene huecos, ni duplicados y está en orden, es decir, el flujo de bytes es exactamente el mismo flujo que fue enviado por el sistema terminal existente en el otro extremo de la conexión.
Cada vez que TCP retransmite, define el siguiente intervalo de fin de temporización como dos veces el valor anterior, en lugar de obtenerlo a partir de los últimos valores de RTTEstimado y RTTDesv. Los intervalos crecen exponencialmente luego de cada retransmisión. Pero cuando el temporizador se inicia luego de recibir datos de la aplicación o recibir un ACK, el intervaloFinDeTemporización se obtiene a partir de los valores más recientes de RTTEstimado y RTTDesv. Proporciona una forma limitada de control de congestión.
En el caso de que se reciban tres ACK duplicados, el emisor TCP realiza una retransmisión rápida, reenviando el segmento que falta antes de que caduque el temporizador de dicho segmento.
-- S puede seguir enviando datos --